package com.ynwa;

/**
 * Java的深拷贝和浅拷贝
 * 1. 浅拷贝只是改变引用的指针, 而实际的对象还是那个, 例如对一个普通对象使用 '=' 赋值(非基本类型)
 * 2. 深拷贝则是新创建的一个对象
 * 3. 使用Object.clone(), 需要实现 Cloneable 接口, 否则抛异常, 它是一个浅拷贝, 因为无法让成员对象深拷贝
 * 4. 类中如果有成员属性, 那么子类则是浅拷贝, 需要让子类也实现Cloneable才能是真正意义上的深拷贝
 * 5. 其他方式, 序列化与反序列化, 例如生成json在反序列化成对象
 *
 * @author gengzd
 * @date 2019-06-25 11:27
 */
public class DeepAndShallowCopy implements Cloneable {
    public String getName() {
        return name;
    }

    public DeepAndShallowCopy setName(String name) {
        this.name = name;
        return this;
    }

    private String name;

    public static void main(String[] args) throws CloneNotSupportedException {
        DeepAndShallowCopy dsc = new DeepAndShallowCopy().setName("deep");

        DeepAndShallowCopy clone = (DeepAndShallowCopy) dsc.clone();

        System.out.println(dsc == clone);
        System.out.println(clone.getName());
    }
}
